﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Windows.Forms;
using EFITransmissao.Controle;
using EFITransmissao.Entidade;
using System.Data;

namespace EFITransmissao.Interface
{
    public class InterTransmissao
    {
        public InterTransmissao() { }

        #region SQLServer

        public static void InserindoNovoMedidorSQLServer()
        {
            Controle.CtlCadMedidor.InserindoNovoMedidor();
        }

        public static ArqControle ObterTodosArquivoControle()
        {
            ArqControle obj = new ArqControle();
            try
            {
                DataTable dt = Controle.CtlLeitura.ObterKeyTblControle();
                foreach (DataRow dr in dt.Rows)
                {
                    obj.DtLeitFim = dr["DtLeitFim"].ToString();
                    obj.DtLeitInicio = dr["DtLeitInicio"].ToString();
                    obj.IdLeitura = int.Parse(dr["IdLeitura"].ToString());
                    obj.LeitRecebida= bool.Parse(dr["LeiturasEnviadas"].ToString());
                    obj.Leiturista = dr["Leiturista"].ToString();
                    obj.Matricula = dr["Matricula"].ToString();
                    obj.MesFat = dr["MesFat"].ToString();
                    obj.NPartes = Int16.Parse(dr["NPartes"].ToString());
                    obj.PartesEnv = Int16.Parse(dr["PartesEnv"].ToString());
                    obj.PartesRec = Int16.Parse(dr["PartesRec"].ToString());
                    obj.Remessa = int.Parse(dr["Remessa"].ToString());
                    obj.Roteiro = Int32.Parse(dr["Roteiro"].ToString());
                    obj.RotRecebido = bool.Parse(dr["RoteiroRecebido"].ToString());
                    obj.TotReg = Int16.Parse(dr["TotRegistros"].ToString());                    
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return obj;
        }

        public static void Desmarcar_PartesREC_SQL(Roteiro obj)
        {
            Controle.CtlControle.Desmarcar_PartesREC_SQL(obj);
        }

        public static void Desmarcar_PartesENV_SQL(Roteiro obj)
        {
            Controle.CtlControle.Desmarcar_PartesENV_SQL(obj);
        }

        public static bool StatusRoteiroDisponivel(string matricula)
        {
            return Controle.CtlLeiturista.ObterStatusRoteiroDisponivel(matricula);
        }

        public static bool StatusRoteiroDisponivel(Roteiro obj)
        {
            return Controle.CtlLeiturista.ObterStatusRoteiroDisponivel(obj);
        }
        
        public static bool StatusLeituraDisponivel(Roteiro obj)
        {
            return Controle.CtlLeiturista.ObterStatusLeituraDisponivel(obj);
        }

        public static Roteiro ObterRoteiroDisponivel(string matricula)
        {
            return Controle.CtlLeiturista.ObterRoteiroDisponivel(matricula);
        }

        public static bool ObterStatusPartesEnviadas(int matricula)
        {
            return Controle.CtlControle.ObterStatusPartesEnviadas(matricula);
        }
        /// <summary>
        /// Retorna a Lista de Objeto(Roteiro) para
        /// ser gerando um novo registro de controle em leitura.
        /// </summary>
        /// <param name="leiturista">Nome do Leiturista</param>
        public static bool RoteiroDisponivel(string matricula, Entidade.ListaMinMax obj)
        {
            bool retorno = false;
            //Validando Mín e Max (Ordem).
            Roteiro rt = new Roteiro();
            rt = Controle.CtlLeiturista.ObterRoteiroDisponivel(matricula);

            //Verifica o Minimo Maximo entre o arquivo txt já inserido no banco com
            //o dado de controle do roteiro (SQL).
            if (int.Parse(rt.MinOrdem) == obj.MinOrdem && int.Parse(rt.MaxOrdem) == obj.MaxOrdem)
            {
                //1º Método retorna os dados disponíveis no banco para do roteiro gerado.
                //2º Método Insere os dados do 1º Método na tabela de controle de leitura.
                //CtlLeiturista.InserindoControleLeituraSQL(Controle.CtlLeiturista.ObterRoteiroDisponivel(matricula));
                CtlLeiturista.InserindoControleLeituraSQL(rt);

                //Atualização do Flag de confirmação da recepção do roteiro.            
                //rt = CtlLeiturista.ObterRoteiroDisponivel(matricula);
                CtlLeiturista.AtualizandoControleRoteiroSQL(rt);

                retorno = true;
            }

            return retorno;
        }

        public static void InsereFotosAleatoriasForSQLServer()
        {
            Controle.CtlFotosAleatorias.InsereFotosAleatoriasForSQLServer();
        }

        #endregion

        public static void LimparRecebidosLocal()
        {
            string[] arquivos = System.IO.Directory.GetFiles(@".\");
            foreach (var item in arquivos)
            {
                if (item.ToString().ToUpper() == @".\Leituras.txt".ToUpper() || item.ToString().ToUpper() == @".\Controle.txt".ToUpper())
                    
                    System.IO.File.Delete(item.ToString());

            }
        }

        public static void LimparEnviadosServidor(string nome)
        {
            string pathServidor = CtlLeiturista.ObterDiretorioExportacao(nome) + @"\";

            System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathServidor);

            System.IO.FileInfo[] arquivos = diretorio.GetFiles("*.txt");

            foreach (System.IO.FileInfo item in arquivos)
            {
                if (item.ToString().ToUpper() == @"Leituras.txt".ToUpper())
                    System.IO.File.Delete(diretorio + item.ToString());

            }  
        }

        public static void LimparEnviadosServidorBackup(string pathServidor, string arquivo)
        {
            
            System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathServidor);

            System.IO.FileInfo[] arquivos = diretorio.GetFiles(arquivo.Substring(0,17) + "*.txt");

            foreach (System.IO.FileInfo item in arquivos)
            {                
                System.IO.File.Delete(diretorio + arquivo);                    
            }
        }

        public static bool ObterArquivosRoteiro_Servidor(string nome)
        {
            bool retorno = false;
            int i = 0;
            string pathServidor = CtlLeiturista.ObterDiretorioImportacao(nome) + @"\";

            System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathServidor);

            System.IO.FileInfo[] arquivos = diretorio.GetFiles("*.txt");

            foreach (System.IO.FileInfo item in arquivos)
            {
                if (item.Name.ToString().ToUpper() == "Leituras.txt".ToUpper() || item.Name.ToString().ToUpper() == "Controle.txt".ToUpper())
                {
                    System.IO.File.Copy(pathServidor + item.Name, @".\" + item.Name);
                    i++;
                }
            }

            if (i == 2)
            {
                retorno = true;
            }

            return retorno;
        }

        public static bool EnviarArquivosLeituras_Servidor(string nome)
        {
            bool retorno = false;
            bool x = true;

            string pathPDA = @".\";
            string pathServidor = CtlLeiturista.ObterDiretorioExportacao(nome) + @"\";

            System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathPDA);
            System.IO.FileInfo[] arquivos = diretorio.GetFiles("Leituras.txt");


            foreach (System.IO.FileInfo item in arquivos)
            {
                if (x == true)
                {
                    LimparEnviadosServidor(nome);
                    x = false;
                }

                if (item.Name.ToString().ToUpper() == @"Leituras.txt".ToUpper())
                {
                    System.IO.File.Copy(pathPDA + item.Name, pathServidor + item.Name);
                    retorno = true;
                }
            }
            return retorno;
        }
                
        public static bool EnviarArquivosLeituras_ServidorBackup(string nome)
        {
            bool retorno = false;
            bool x = true;
            string matricula = Controle.CtlLeiturista.ObterMatriculaCE(nome);
            string arquivo;

            string pathPDA = @".\";
            string pathServidor = @"\\alfa\Municipios\Estancia\ColetadeLeitura\Coleta de Dados\Arquivos Transferidos WM\";

            System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathPDA);
            System.IO.FileInfo[] arquivos = diretorio.GetFiles("Leituras.txt");
                        
            arquivo = matricula + "_Leit_" + DateTime.Now.Date.Year.ToString() +
                                             DateTime.Now.Date.Month.ToString().PadLeft(2, '0') +
                                             DateTime.Now.Date.Day.ToString().PadLeft(2, '0') + "_" +
                                             DateTime.Now.Hour.ToString().PadLeft(2, '0') +
                                             DateTime.Now.Minute.ToString().PadLeft(2, '0') +
                                             DateTime.Now.Second.ToString().PadLeft(2, '0') + ".txt";

            foreach (System.IO.FileInfo item in arquivos)
            {
                if (x == true)
                {
                    LimparEnviadosServidorBackup(pathServidor, arquivo);
                    x = false;
                }

                if (item.Name.ToString().ToUpper() == @"Leituras.txt".ToUpper())
                {
                    System.IO.File.Copy(pathPDA + item.Name, pathServidor + arquivo);
                    retorno = true;
                }
            }
            return retorno;
        }

        /// <summary>
        /// Insere na lista local vinda do SQL
        /// </summary>
        public static void InserirListaTelefonica()
        {
            Controle.CtlLeiturista.InserirListaTelefonica();
        }

        /// <summary>
        /// Inserindo dados dos últimos leituristas que passaram na rota:
        /// </summary>
        public static void InserirUltimosLeitRotas()
        {
            Controle.CtlLeiturista.InserirUltimosLeitRotas();
        }

        public static void InsereRoteiroGeral()
        {
            Controle.CtlLeiturista.InsereRoteiroGeral();
        }

        public static IList<string> ObterListaLeituristasRoteiroGeral()
        {
            return Controle.CtlLeiturista.ObterLeituristasRoteiroGeral();
        }

        public static DataTable ObterLeituristasRoteiroGeral_Nome(int matricula)
        {
            return Controle.CtlLeiturista.ObterLeituristasRoteiroGeral_Nome(matricula);
        }

        public static void InsereFatConsumosZeros_CE()
        {
            Controle.CtlLeiturista.InsereFatConsumosZeros_CE();
        }

        public static bool ObterConsumoZero_UC(string uc)
        {
            return Controle.CtlLeiturista.ObterConsumoZero_UC(uc);
        }

        #region SDCard
                
        public static void CompactarDB_SDCard()
        {
            CtlSDCard.CompactarDB_SDCard();
        }

        /// <summary>
        /// Atualiza as informações coletadas para o Backup - SDCard:
        /// </summary>
        /// <param name="obj"></param>
        public static void AtualizaDadosLeituras_SDCard(Leituras obj)
        {
            CtlSDCard.AtualizaDadosLeituras_SDCard(obj);
        }

        #endregion

        #region Fotos Aleatorias

        public static void DeleteTodos_FotosAleatorias()
        {
            Controle.CtlFotosAleatorias.DeleteTodos_FotosAleatorias();
        }

        public static int ObterTotalFotos(string iduc)
        {
            return Controle.CtlFotosAleatorias.ObterTotalFotos(iduc);
        }  

        #endregion

        #region Manutenção DBLocal - Leituras.sdf

        public static void RepararDB()
        {
            Controle.CtlManutencao.RepararDB();
        }

        public static void CompactarDB()
        {
            Controle.CtlManutencao.CompactarDB();
        }
        
        #endregion

        #region Transmissão de Fotografias

        public static bool TransferenciaFotosColeta(string nome)
        {
            bool retorno = false;
            try
            {
                string pathPDA = @".\Program Files\EFITransmissao\Fotos\Coleta\";
                string pathServidor = CtlLeiturista.ObterDiretorioExportacao(nome) + @"\Fotos\Coleta\";

                System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathPDA);
                System.IO.FileInfo[] arquivos = diretorio.GetFiles("*.jpg");
                
                foreach (System.IO.FileInfo item in arquivos)
                {
                    //if (File.Exists(pathServidor + item.Name) == true)
                    //    File.Delete(pathServidor + item.Name);

                    System.IO.File.Copy(pathPDA + item.Name, pathServidor + item.Name,true);                    
                }
                diretorio.Refresh();
                diretorio = null;
                retorno = true;
            }
            catch (Exception)
            {
                retorno = false;
            }

            return retorno;
        }

        public static bool TransferenciaFotosExterna(string nome)
        {
            bool retorno = false;
            try
            {
                string pathPDA = @".\Program Files\EFITransmissao\Fotos\Externa\";
                string pathServidor = CtlLeiturista.ObterDiretorioExportacao(nome) + @"\Fotos\Externa\";

                System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathPDA);
                System.IO.FileInfo[] arquivos = diretorio.GetFiles("*.jpg");

                foreach (System.IO.FileInfo item in arquivos)
                {
                    //if (File.Exists(pathServidor + item.Name) == true)
                    //    File.Delete(pathServidor + item.Name);

                    System.IO.File.Copy(pathPDA + item.Name, pathServidor + item.Name,true);
                }
                diretorio.Refresh();
                diretorio = null;

                retorno = true;
            }
            catch (Exception)
            {
                retorno = false;
            }

            return retorno;
        }

        public static bool DeletePDAFotosColeta()
        {
            bool retorno = false;
            try
            {
                string pathPDA = @".\Program Files\EFITransmissao\Fotos\Coleta\";

                if (Directory.Exists(pathPDA) == false)
                {
                    Directory.CreateDirectory(pathPDA);
                }
                else
                {
                    Directory.Delete(pathPDA, true);
                }
                
                retorno = true;
            }
            catch (Exception)
            {
                retorno = false;
            }

            return retorno;
        }

        public static void DeletePDAFotosColeta_MyDocuments()
        {
            try
            {
                string pathPDA = @".\My Documents\My Pictures\";
                
                System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathPDA);
                System.IO.FileInfo[] arquivos = diretorio.GetFiles("img*.jpg");

                foreach (System.IO.FileInfo item in arquivos)
                {
                    System.IO.File.Delete(pathPDA + item.Name);
                }
                diretorio.Refresh();
                diretorio = null;

            }
            catch (Exception ex) { throw new Exception(ex.Message); }
            
            return;
            
        }

        public static bool DeletePDAFotosExterna()
        {
            bool retorno = false;
            try
            {
                string pathPDA = @".\Program Files\EFITransmissao\Fotos\Externa\";

                if (Directory.Exists(pathPDA) == false)
                {
                    Directory.CreateDirectory(pathPDA);
                }
                else
                {
                    Directory.Delete(pathPDA,true);
                }

                retorno = true;
            }
            catch (Exception)
            {
                retorno = false;
            }

            return retorno;
        }

        #endregion
               
    }
}
